package com.test.gcTest;

import java.util.Random;

/**
 * @Description
 * @Author mzb
 * @Date 2020/5/20 22:04
 * springboot配置：java -server -Xms1024m -XX:+UseG1GC -jar aa.jar
 * 4种算法-》收集器实现：串行，并行，并发，G1-
 * 默认配置查看 java -XX:+PrintCommandLineFlags -version
 * 细粒度查看 jinfo -flag PrintGCDetails 进程号
 * 测试gc 垃圾器(查默认？自己配？回收原理？选择？)
 * 堆   jmap -F -dump:format=b,file=tomcat.bin 64952
 * 栈  jstack 19566 >8888.txt
 *  zj：思想__算法，落地 收集器
 *  1、引用计数 2、复制 3、标记清除 4、标记整理，其中2作用于新生代，3 4作用于老年代
 *  串行：UseSerialGC_用户线程暂停 一个gc线程，并行 UseParNewGC UseParallelGC 用户线程暂停 多个gc线程，并发 CMS 同时进行
 *  复制：1. eden满_>触发gc eden 存活obj_>from  2、eden满 _>触发gc 清空eden.from 存活不死obj_>to 达到15_>oid
 *  标记要回收obj、压缩 使空间连续
 */
public class GCRoot {
    //gcroot-作用对象。
    private static  GCRoot root2;
//    private static  final GCRoot root3;
    public static void mm() {
        GCRoot root1=new GCRoot();
        System.gc();
    }


    public static void test1() throws Exception{
        //串行垃圾收集器 用户线程暂停
        // -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseSerialGC
        String str="8888";
        while (true){
            str+=str+new Random().nextInt(888888);
            str.intern();
        }
        //(DefNew) ->[GC (Allocation Failure) [DefNew: 2748K->320K(3072K), 0.0025664 secs] 2748K->788K(9920K), 0.0026359 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
        // 用哪种垃圾器？ def new generation --> tenured generation
        // gc 新生代 full gc老年代
    }

    public static void test2() throws Exception{
        //并行垃圾收集器 用户线程暂停
        // -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParNewGC
        //  -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParallelGC
        String str="8888";
        while (true){
            str+=str+new Random().nextInt(888888);
            str.intern();
        }
    }
    public static void test3() throws Exception{
        //G1 垃圾收集器，同时作用于老年 新生,G1其他参数？
        // -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseG1GC
        String str="8888";
        while (true){
            str+=str+new Random().nextInt(888888);
            str.intern();
        }
        /**
         * Heap
         *  garbage-first heap   total 10240K, used 4540K [0x00000000ff600000, 0x00000000ff700050, 0x0000000100000000)
         *   region size 1024K, 1 young (1024K), 0 survivors (0K)
         *  Metaspace       used 3176K, capacity 4568K, committed 4864K, reserved 1056768K
         *   class space    used 339K, capacity 392K, committed 512K, reserved 1048576K
         */
    }

    public static void main(String[] args) throws Exception{
        test2();
    }
}
